home *** CD-ROM | disk | FTP | other *** search
/ Aminet 44 / Aminet 44 (2001)(GTI - Schatztruhe)[!][Aug 2001].iso / Aminet / dev / src / Rkm_asm.lha / Assembly_Codes / OS_Sources / Graphics / BitMaps.s next >
Text File  |  1992-09-02  |  11KB  |  623 lines

  1.  
  2.  * This code shows how to set-up two Bitmaps for one screen. It draws on
  3.  * bitmap 0, flips to bitmap 1 (after displaying bitmap 0) and then draws
  4.  * on bitmap 1 before displaying bitmap 1.
  5.  
  6.     INCDIR    WORK:Include/
  7.  
  8.     INCLUDE    exec/exec_lib.i
  9.     INCLUDE    exec/memory.i
  10.     INCLUDE    intuition/intuition_lib.i
  11.     INCLUDE    intuition/intuition.i
  12.     INCLUDE dos/dos_lib.i
  13.     INCLUDE dos/dos.i
  14.     INCLUDE dos/dosextens.i
  15.     INCLUDE    graphics/graphics_lib.i
  16.     INCLUDE    graphics/text.i
  17.     INCLUDE    workbench/icon_lib.i
  18.     INCLUDE    workbench/startup.i
  19.     INCLUDE    workbench/workbench.i
  20.  
  21. LIB_VER        EQU    39
  22. TRUE        EQU    -1
  23. FALSE        EQU    0
  24. BMW        EQU    320
  25. BMH        EQU    256
  26. BMF        EQU    0
  27. BMD        EQU    2
  28. BMP        EQU    0
  29. BMB        EQU    10240        ; $00002800
  30. BMR        EQU    0
  31.  
  32.     lea    membuf(pc),a4
  33.  
  34.  * membuf (Memory Buffer) is set-up so that this code can be
  35.  * position-independant. The memory buffer contains the following
  36.  * addresses and their data:
  37.  *
  38.  *   0  Startup Return Message
  39.  *   4  _DOSBase
  40.  *   8  _IntuitionBase
  41.  *  12 _IconBase
  42.  *  16 Old Directory from CurrentDir()
  43.  *  20 Disk Object from GetDiskObject()
  44.  *  24 Argument addresses (30*4)
  45.  * 144 ReadArgs() return value
  46.  * 148 Task address
  47.  * 152 _GfxBase
  48.  * 156 window rastport
  49.  * 160 viewport
  50.  * 164
  51.  * 165
  52.  * 166 Memory Buffer (12 bytes)
  53.  * 178 window
  54.  * 182 value 1 (for ToolType/CLI result)
  55.  * 183 value 2 (for ToolType/CLI result)
  56.  * 184 screen rastport
  57.  * 188
  58.  * 192
  59.  * 194
  60.  * 196
  61.  * 200
  62.  * 202
  63.  * 204 screen
  64.  * 208 colourmap
  65.  * 212 bitmap0
  66.  * 216 bitmap1
  67.  * 220
  68.  
  69.  * The Startup code below reads two CLI Arguments/WB ToolTypes as an example
  70.  * of how to programme CLI Arguments/WB ToolTypes.
  71.  *
  72.  * Note: The CLI Arguments/WB ToolTypes are done after Startup and Library
  73.  *       opening, so there is no use for the A0 pointer (which contains
  74.  *       pr_CLI).
  75.  
  76.     suba.l    a1,a1
  77.     move.l    4.w,a6
  78.     jsr    _LVOFindTask(a6)
  79.     tst.l    d0
  80.     beq    exit
  81.     move.l    d0,a5
  82.     move.l    a5,148(a4)
  83.     tst.l    pr_CLI(a5)        ; Was this task started from CLI?
  84.     bne.s    _main            ; Yes.
  85.     lea    pr_MsgPort(a5),a0    ; No. From Workbench.
  86.     jsr    _LVOWaitPort(a6)
  87.     lea    pr_MsgPort(a5),a0
  88.     jsr    _LVOGetMsg(a6)
  89.     move.l    d0,(a4)            ; D0 = A WBStartup Message.
  90.  
  91. _main
  92.     moveq    #LIB_VER,d0
  93.         lea     dos_name(pc),a1
  94.     move.l    4.w,a6
  95.         jsr    _LVOOpenLibrary(a6)
  96.         move.l  d0,4(a4)
  97.         beq     quit
  98.  
  99.         moveq    #LIB_VER,d0
  100.         lea     int_name(pc),a1
  101.         jsr    _LVOOpenLibrary(a6)
  102.         move.l  d0,8(a4)
  103.         beq     cl_dos
  104.  
  105.         moveq    #LIB_VER,d0
  106.         lea     gfx_name(pc),a1
  107.         jsr    _LVOOpenLibrary(a6)
  108.         move.l  d0,152(a4)
  109.         beq     cl_int
  110.  
  111.         moveq    #LIB_VER,d0
  112.         lea     icon_name(pc),a1
  113.         jsr    _LVOOpenLibrary(a6)
  114.         move.l  d0,12(a4)
  115.         beq     cl_gfx
  116.  
  117.  * Check the ToolTypes/CLI Arguments.
  118.  
  119.         move.l    (a4),a0
  120.         tst.l   a0
  121.         beq    fromcli
  122.     move.l    sm_ArgList(a0),a5
  123.         move.l  (a5),d1
  124.     beq    zero_args
  125.     move.l    4(a4),a6
  126.     jsr    _LVOCurrentDir(a6)
  127.         move.l  d0,16(a4)
  128.         move.l    wa_Name(a5),a0
  129.     move.l    12(a4),a6
  130.     jsr    _LVOGetDiskObject(a6)
  131.         move.l  d0,20(a4)
  132.         beq     zero_args
  133.         move.l    d0,a5
  134.         move.l  do_ToolTypes(a5),a5
  135.  
  136.     move.l    a5,a0
  137.         lea    ftstg0(pc),a1
  138.         jsr    _LVOFindToolType(a6)
  139.     tst.l    d0
  140.         beq.s    tt1
  141.     move.l    d0,a3
  142.     move.l    a3,a0
  143.     lea    mtstg0(pc),a1
  144.     jsr    _LVOMatchToolValue(a6)
  145.     tst.l    d0
  146.     beq.s    tto1
  147.     clr.b    182(a4)
  148.     bra.s    tt1
  149. tto1    move.l    a3,a0
  150.     lea    mtstg1(pc),a1
  151.     jsr    _LVOMatchToolValue(a6)
  152.     tst.l    d0
  153.     beq.s    tt1
  154.     move.b    #1,182(a4)
  155. tt1    move.l    a5,a0
  156.         lea    ftstg1(pc),a1
  157.         jsr    _LVOFindToolType(a6)
  158.     tst.l    d0
  159.         beq.s    tt2
  160.     move.l    d0,a3
  161.     move.l    a3,a0
  162.     lea    mtstg2(pc),a1
  163.     jsr    _LVOMatchToolValue(a6)
  164.     tst.l    d0
  165.     beq.s    tto2
  166.     clr.b    183(a4)
  167.     bra.s    tt2
  168. tto2    move.l    a3,a0
  169.     lea    mtstg3(pc),a1
  170.     jsr    _LVOMatchToolValue(a6)
  171.     tst.l    d0
  172.     beq.s    tto3
  173.     move.b    #1,183(a4)
  174.     bra.s    tt2
  175. tto3    move.l    a3,a0
  176.     lea    mtstg4(pc),a1
  177.     jsr    _LVOMatchToolValue(a6)
  178.     tst.l    d0
  179.     beq.s    tto4
  180.     move.b    #2,183(a4)
  181.     bra.s    tt2
  182. tto4    move.l    a3,a0
  183.     lea    mtstg5(pc),a1
  184.     jsr    _LVOMatchToolValue(a6)
  185.     tst.l    d0
  186.     beq.s    tt2
  187.     move.b    #3,183(a4)
  188. tt2
  189.     nop
  190.  
  191.  
  192. free_diskobj
  193.         move.l    20(a4),a0
  194.         jsr    _LVOFreeDiskObject(a6)
  195.     bra    zero_args
  196.  
  197. fromcli    lea    template(pc),a0
  198.     move.l  a0,d1
  199.         lea    24(a4),a5
  200.         move.l  a5,d2
  201.         moveq    #0,d3
  202.     move.l    4(a4),a6
  203.         jsr    _LVOReadArgs(a6)
  204.         move.l  d0,144(a4)
  205.         beq    zero_args
  206.  
  207.     move.l    (a5),a0
  208.     lea    mtstg0(pc),a1
  209.     bsr    cmpbyte
  210.     tst.l    d0
  211.     bne.s    cao1
  212.     clr.b    182(a4)
  213.     bra.s    ca1
  214. cao1    move.l    (a5),a0
  215.     lea    mtstg1(pc),a1
  216.     bsr    cmpbyte
  217.     tst.l    d0
  218.     bne.s    ca1
  219.     move.b    #1,182(a4)
  220. ca1    move.l    4(a5),a0
  221.     lea    mtstg2(pc),a1
  222.     bsr    cmpbyte
  223.     tst.l    d0
  224.     bne.s    cao2
  225.     clr.b    183(a4)
  226.     bra.s    ca2
  227. cao2    move.l    4(a5),a0
  228.     lea    mtstg3(pc),a1
  229.     bsr    cmpbyte
  230.     tst.l    d0
  231.     bne.s    cao3
  232.     move.b    #1,183(a4)
  233.     bra.s    ca2
  234. cao3    move.l    4(a5),a0
  235.     lea    mtstg4(pc),a1
  236.     bsr    cmpbyte
  237.     tst.l    d0
  238.     bne.s    cao4
  239.     move.b    #2,183(a4)
  240.     bra.s    ca2
  241. cao4    move.l    4(a5),a0
  242.     lea    mtstg5(pc),a1
  243.     bsr    cmpbyte
  244.     tst.l    d0
  245.     bne.s    ca2
  246.     move.b    #3,183(a4)
  247. ca2
  248.     nop
  249.  
  250.  
  251. free_cliargs
  252.         move.l    144(a4),d1
  253.         jsr    _LVOFreeArgs(a6)
  254.  
  255. zero_args
  256.  
  257.     moveq    #bm_SIZEOF,d0
  258.     move.l    #MEMF_PUBLIC!MEMF_CLEAR,d1
  259.     move.l    4.w,a6
  260.     jsr    _LVOAllocMem(a6)
  261.     move.l    d0,212(a4)
  262.     move.l    d0,bm0ptr
  263.     beq    cl_icon
  264.  
  265.     move.l    d0,a0
  266.     move.b    #BMD,d0
  267.     move.w    #BMW,d1
  268.     move.w    #BMH,d2
  269.     move.l    152(a4),a6
  270.     jsr    _LVOInitBitMap(a6)
  271.  
  272.     move.w    #BMW,d0
  273.     move.w    #BMH,d1
  274.     jsr    _LVOAllocRaster(a6)
  275.     move.l    212(a4),a0
  276.     move.l    d0,8(a0)
  277.     beq    fr_bm0
  278.  
  279.     move.l    d0,a1
  280.     move.l    #BMB,d0
  281.     moveq    #0,d1
  282.     jsr    _LVOBltClear(a6)
  283.  
  284.     move.w    #BMW,d0
  285.     move.w    #BMH,d1
  286.     jsr    _LVOAllocRaster(a6)
  287.     move.l    212(a4),a0
  288.     move.l    d0,12(a0)
  289.     beq    fr_plane0
  290.  
  291.     move.l    d0,a1
  292.     move.l    #BMB,d0
  293.     moveq    #0,d1
  294.     jsr    _LVOBltClear(a6)
  295.  
  296.     moveq    #bm_SIZEOF,d0
  297.     move.l    #MEMF_PUBLIC!MEMF_CLEAR,d1
  298.     move.l    4.w,a6
  299.     jsr    _LVOAllocMem(a6)
  300.     move.l    d0,216(a4)
  301.     beq    fr_plane1
  302.  
  303.     move.l    d0,a0
  304.     move.b    #BMD,d0
  305.     move.w    #BMW,d1
  306.     move.w    #BMH,d2
  307.     move.l    152(a4),a6
  308.     jsr    _LVOInitBitMap(a6)
  309.  
  310.     move.w    #BMW,d0
  311.     move.w    #BMH,d1
  312.     jsr    _LVOAllocRaster(a6)
  313.     move.l    216(a4),a0
  314.     move.l    d0,8(a0)
  315.     beq    fr_bm1
  316.  
  317.     move.l    d0,a1
  318.     move.l    #BMB,d0
  319.     moveq    #0,d1
  320.     jsr    _LVOBltClear(a6)
  321.  
  322.     move.w    #BMW,d0
  323.     move.w    #BMH,d1
  324.     jsr    _LVOAllocRaster(a6)
  325.     move.l    216(a4),a0
  326.     move.l    d0,12(a0)
  327.     beq    fr_plane2
  328.  
  329.     move.l    d0,a1
  330.     move.l    #BMB,d0
  331.     moveq    #0,d1
  332.     jsr    _LVOBltClear(a6)
  333.  
  334.     suba.l    a0,a0
  335.     lea    scrntags(pc),a1
  336.     move.l    8(a4),a6
  337.     jsr    _LVOOpenScreenTagList(a6)
  338.     move.l    d0,wndwscrn
  339.     move.l    d0,204(a4)
  340.     beq    fr_plane3
  341.  
  342.     suba.l    a0,a0
  343.     lea    wndwtags(pc),a1
  344.     jsr    _LVOOpenWindowTagList(a6)
  345.     move.l    d0,178(a4)
  346.     beq    cl_scrn
  347.  
  348.     move.l    d0,a0
  349.     move.l    wd_RPort(a0),156(a4)
  350.  
  351.     move.l    204(a4),a0
  352.     lea    sc_RastPort(a0),a1
  353.     move.l    a1,184(a4)
  354.     lea    sc_ViewPort(a0),a2
  355.     move.l    a2,160(a4)
  356.  
  357.     move.l    a2,a0
  358.     move.l    vp_ColorMap(a0),208(a4)
  359.  
  360.     move.l    184(a4),a1
  361.     move.b    #3,d0
  362.     move.l    152(a4),a6
  363.     jsr    _LVOSetAPen(a6)
  364.  
  365.     clr.w    d0
  366.     move.w    #40,d1
  367.     move.w    #319,d2
  368.     move.w    #127,d3
  369.     move.l    184(a4),a1
  370.     jsr    _LVORectFill(a6)
  371.  
  372.     move.w    #16,d0
  373.     move.w    #26,d1
  374.     move.l    184(a4),a1
  375.     jsr    _LVOMove(a6)
  376.  
  377.     lea    bmstg0(pc),a0
  378.     moveq    #8,d0
  379.     move.l    184(a4),a1
  380.     jsr    _LVOText(a6)
  381.  
  382.     jsr    _LVOWaitTOF(a6)
  383.  
  384.     moveq    #100,d1
  385.     move.l    4(a4),a6
  386.     jsr    _LVODelay(a6)
  387.  
  388.     move.l    184(a4),a1
  389.     move.l    216(a4),rp_BitMap(a1)
  390.  
  391.     move.l    160(a4),a1
  392.     move.l    vp_RasInfo(a1),a1
  393.     move.l    216(a4),ri_BitMap(a1)
  394.  
  395.     move.l    184(a4),a1
  396.     move.b    #2,d0
  397.     move.l    152(a4),a6
  398.     jsr    _LVOSetAPen(a6)
  399.  
  400.     clr.w    d0
  401.     move.w    #128,d1
  402.     move.w    #319,d2
  403.     move.w    #255,d3
  404.     move.l    184(a4),a1
  405.     jsr    _LVORectFill(a6)
  406.  
  407.     move.w    #16,d0
  408.     move.w    #36,d1
  409.     move.l    184(a4),a1
  410.     jsr    _LVOMove(a6)
  411.  
  412.     lea    bmstg1(pc),a0
  413.     moveq    #8,d0
  414.     move.l    184(a4),a1
  415.     jsr    _LVOText(a6)
  416.  
  417.     jsr    _LVOWaitTOF(a6)
  418.  
  419.     move.l    204(a4),a0
  420.     move.l    8(a4),a6
  421.     jsr    _LVOMakeScreen(a6)
  422.     jsr    _LVORethinkDisplay(a6)
  423.  
  424.     move.l    152(a4),a6
  425.     jsr    _LVOWaitTOF(a6)
  426.  
  427.     moveq    #100,d1
  428.     move.l    4(a4),a6
  429.     jsr    _LVODelay(a6)
  430.  
  431.  
  432. cl_wndw    move.l    178(a4),a0
  433.     move.l    8(a4),a6
  434.     jsr    _LVOCloseWindow(a6)
  435.  
  436. cl_scrn    move.l    204(a4),a0
  437.     move.l    8(a4),a6
  438.     jsr    _LVOCloseScreen(a6)
  439.  
  440. fr_plane3
  441.     move.l    216(a4),a0
  442.     move.l    bm_Planes+4(a0),a0
  443.     tst.l    a0
  444.     beq.s    fr_plane2
  445.     move.w    #BMW,d0
  446.     move.w    #BMH,d1
  447.     move.l    152(a4),a6
  448.     jsr    _LVOFreeRaster(a6)
  449.  
  450. fr_plane2
  451.     move.l    216(a4),a0
  452.     move.l    bm_Planes(a0),a0
  453.     tst.l    a0
  454.     beq.s    fr_bm1
  455.     move.w    #BMW,d0
  456.     move.w    #BMH,d1
  457.     move.l    152(a4),a6
  458.     jsr    _LVOFreeRaster(a6)
  459.  
  460. fr_bm1    move.l    216(a4),a1
  461.     moveq    #bm_SIZEOF,d0
  462.     move.l    4.w,a6
  463.     jsr    _LVOFreeMem(a6)
  464.  
  465. fr_plane1
  466.     move.l    212(a4),a0
  467.     move.l    bm_Planes+4(a0),a0
  468.     tst.l    a0
  469.     beq.s    fr_plane0
  470.     move.w    #BMW,d0
  471.     move.w    #BMH,d1
  472.     move.l    152(a4),a6
  473.     jsr    _LVOFreeRaster(a6)
  474.  
  475. fr_plane0
  476.     move.l    212(a4),a0
  477.     move.l    bm_Planes(a0),a0
  478.     tst.l    a0
  479.     beq.s    fr_bm0
  480.     move.w    #BMW,d0
  481.     move.w    #BMH,d1
  482.     move.l    152(a4),a6
  483.     jsr    _LVOFreeRaster(a6)
  484.  
  485. fr_bm0    move.l    212(a4),a1
  486.     moveq    #bm_SIZEOF,d0
  487.     move.l    4.w,a6
  488.     jsr    _LVOFreeMem(a6)
  489.  
  490. cl_icon    move.l  12(a4),a1
  491.     move.l    4.w,a6
  492.         jsr    _LVOCloseLibrary(a6)
  493.  
  494. cl_gfx    move.l  152(a4),a1
  495.     move.l    4.w,a6
  496.         jsr    _LVOCloseLibrary(a6)
  497.  
  498. cl_int    move.l  8(a4),a1
  499.     move.l    4.w,a6
  500.         jsr    _LVOCloseLibrary(a6)
  501.  
  502. cl_dos    move.l  4(a4),a1
  503.     move.l    4.w,a6
  504.         jsr    _LVOCloseLibrary(a6)
  505.  
  506. quit    move.l  #8000000,d0
  507.         moveq    #MEMF_CHIP,d1
  508.     move.l    4.w,a6
  509.     jsr    _LVOAllocMem(a6)
  510.     tst.l    d0
  511.     beq.s    cleanup
  512.     move.l    d0,a1
  513.     move.l    #8000000,d0
  514.     jsr    _LVOFreeMem(a6)
  515. cleanup    tst.l    (a4)
  516.     beq.s    exit            ; Exit - Task was started from CLI.
  517.     move.l    4.w,a6
  518.     jsr    _LVOForbid(a6)
  519.     move.l    (a4),a1            ; Reply to the WB Startup Message and
  520.     jsr    _LVOReplyMsg(a6)    ; Exit - Task was started from WB.
  521. exit    moveq    #0,d0
  522.     rts
  523.  
  524.  
  525.  * Sub-Routines.
  526.  
  527. cmpbyte    move.b  (a0)+,d0
  528.         move.b  (a1)+,d1
  529.         tst.b   d0
  530.         beq.s   byte0
  531.         cmp.b   d1,d0
  532.         beq.s   cmpbyte
  533. byte0    sub.b   d1,d0
  534.         ext.w   d0
  535.         ext.l   d0
  536.         rts
  537.  
  538. findlen    move.l    a0,a1
  539.     moveq    #0,d0
  540. not_nil    tst.b    (a1)+
  541.     beq.s    gotlen
  542.     addq.l    #1,d0
  543.     bra.s    not_nil
  544. gotlen    rts
  545.  
  546.  
  547.  * Structure Definitions.
  548.  
  549. pens
  550.     dc.l    -1
  551.  
  552. topaz9
  553.     dc.l    font_name
  554.     dc.w    9
  555.     dc.b    FS_NORMAL,FPF_ROMFONT
  556.  
  557. scrntags
  558.     dc.l    SA_Top,0
  559.     dc.l    SA_Left,0
  560.     dc.l    SA_Width,BMW
  561.     dc.l    SA_Height,BMH
  562.     dc.l    SA_Depth,BMD
  563.     dc.l    SA_DetailPen,0
  564.     dc.l    SA_BlockPen,1
  565.     dc.l    SA_Pens,pens
  566.     dc.l    SA_DisplayID,BMR
  567.     dc.l    SA_Type,CUSTOMSCREEN!CUSTOMBITMAP
  568.     dc.l    SA_BitMap
  569. bm0ptr
  570.     dc.l    0
  571.     dc.l    SA_Font,topaz9
  572.     dc.l    SA_Quiet,TRUE
  573.     dc.l    TAG_DONE
  574.  
  575. wndwtags
  576.     dc.l    WA_Top,0
  577.     dc.l    WA_Left,0
  578.     dc.l    WA_Width,BMW
  579.     dc.l    WA_Height,BMH
  580.     dc.l    WA_DetailPen,0
  581.     dc.l    WA_BlockPen,1
  582.     dc.l    WA_IDCMP,IDCMP_GADGETUP!IDCMP_GADGETDOWN!IDCMP_VANILLAKEY!IDCMP_RAWKEY!IDCMP_MOUSEBUTTONS
  583.     dc.l    WA_Activate,TRUE
  584.     dc.l    WA_Borderless,TRUE
  585.     dc.l    WA_NoCareRefresh,TRUE
  586.     dc.l    WA_SmartRefresh,TRUE
  587.     dc.l    WA_CustomScreen
  588. wndwscrn
  589.     dc.l    0
  590.     dc.l    TAG_DONE
  591.  
  592.  
  593.  * String Variables.
  594.  
  595. int_name    dc.b    'intuition.library',0
  596. dos_name    dc.b    'dos.library',0
  597. icon_name       dc.b    'icon.library',0,0
  598. gfx_name    dc.b    'graphics.library',0
  599. mtstg0        dc.b    'ARG_ONE',0
  600. mtstg1        dc.b    'ARG_TWO',0
  601. mtstg2        dc.b    'ARG_THREE',0
  602. mtstg3        dc.b    'ARG_FOUR',0,0
  603. mtstg4        dc.b    'ARG_FIVE',0,0
  604. mtstg5        dc.b    'ARG_SIX',0
  605. ftstg0          dc.b    'TOOLTYPE_ONE',0,0
  606. ftstg1          dc.b    'TOOLTYPE_TWO',0,0
  607. template    dc.b    'KEYWORD_ONE/K,KEYWORD_TWO/K',0
  608. font_name    dc.b    'topaz.font',0,0
  609. bmstg0        dc.b    'Bitmap 1',0,0
  610. bmstg1        dc.b    'Bitmap 2',0,0
  611.  
  612.  
  613.  * Buffer Variables.
  614.  
  615. membuf        dcb.b    300,0
  616.  
  617.  
  618.     SECTION    VERSION,DATA
  619.  
  620.     dc.b    '$VER: BitMaps.s V1.01 (22.4.2001)',0
  621.  
  622.  
  623.     END